/**
 * 编辑器配置
 */
import { userStore } from '@/store'
import { getFilePath } from '@/utils/file-util'
import { ResultModel } from '@/utils/api/RequestApiModel'
type InsertFnType = (url?: string, alt?: string, href?: string, poster?: string) => void
// 图片上传配置
export const uploadConfig = (type: string) => {
  const store = userStore()
  return {
    // 服务器api地址
    server: '/api/file/fileUpload',
    // 上传文件的参数名
    fieldName: 'file',
    // 单个文件的最大体积限制，默认为 2M
    maxFileSize: (type === 'image' ? 2 : 10) * 1024 * 1024,
    // 最多可上传几个文件，默认为 100
    maxNumberOfFiles: 10,
    // 选择文件时的类型限制，默认为 ['image/*'] 。如不想限制，则设置为 []
    allowedFileTypes: [type + '/*'],
    // 自定义上传参数，例如传递验证的 token 等。参数会被添加到 formData 中，一起上传到服务端。
    meta: {
      token: store.getToken,
    },
    // 将 meta 拼接到 url 参数中，默认 false
    metaWithUrl: false,
    // 自定义增加 http  header
    headers: {
      token: store.getToken,
    },
    // 跨域是否传递 cookie ，默认为 false
    withCredentials: true,
    // 超时时间，默认为 10 秒
    timeout: 5 * 1000,
    // 上传之前触发
    onBeforeUpload(file: File) {
      // file 选中的文件，格式如 { key: file }
      return file
      // 可以 return
      // 1. return file 或者 new 一个 file ，接下来将上传
      // 2. return false ，不上传这个 file
    },
    // 上传进度的回调函数 progress 是 0-100 的数字
    onProgress(progress: number) {},
    // 单个文件上传成功之后
    onSuccess(file: File, res: any) {
      // console.log(`${file.name} 上传成功`, res)
    },
    // 单个文件上传失败
    onFailed(file: File, res: any) {
      // console.log(`${file.name} 上传失败`, res)
    },
    // 上传错误，或者触发 timeout 超时
    onError(file: File, err: any, res: any) {
      // console.log(`${file.name} 上传出错`, err, res)
    },
    // 自定义插入
    customInsert(res: ResultModel, insertFn: InsertFnType) {
      const { data } = res
      const url = getFilePath(data.fileUrl)
      if (type == 'image') {
        insertFn(url, data.description, url)
        return
      }
      if (type == 'video') {
        insertFn(url, '')
        return
      }
    },
  }
}

export interface EditorProps {
  // 默认高度
  height?: number
  // 边框颜色
  border?: string
}
